/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sv.com.intesal.proyecto.managed;

import java.io.Serializable;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import sv.com.intesal.clases.LimpiarManaged;
import sv.com.intesal.clases.Mensaje;
import sv.com.intesal.proyecto.bean.Proyecto;
import sv.com.intesal.proyecto.bean.UtilizacionProyecto;
import sv.com.intesal.proyecto.controlador.UtilizacionProyectoControlador;
import sv.com.intesal.seguridad.managed.SessionManaged;

/**
 *
 * @author ejerez
 */
@ManagedBean(name = "consultaUtilizacionProyectoManaged")
@ViewScoped
public class ConsultaUtilizacionProyectoManaged implements Serializable {

    private Mensaje m;
    private SessionManaged sm;
    private Boolean flagStep_1;
    private Boolean flagStep_2;

    /*ENCA SALIDA PROYECTO*/
    private UtilizacionProyecto selectedEncaUtilizacionProyecto;
    private List<UtilizacionProyecto> encaUtilizacionProyectos;

    /*DETA SALIDA PROYECTO*/
    private UtilizacionProyecto selectedDetaUtilizacionProyecto;
    private List<UtilizacionProyecto> detaUtilizacionProyectos;

    /*PROYECTO*/
    private Proyecto selectedProyecto;

    public ConsultaUtilizacionProyectoManaged() {
        m = new Mensaje();
        sm = new SessionManaged();

        this.flagStep_1 = true;
        this.flagStep_2 = false;
        this.selectedEncaUtilizacionProyecto = new UtilizacionProyecto();
        this.selectedDetaUtilizacionProyecto = new UtilizacionProyecto();
        this.selectedProyecto = new Proyecto();
    }

    public void buscarGrid() {
        try {            
            if (sm.validar_rol_usuario("wfrmcon_UtilizacionProyecto", sm.buscar) == true) {
                //this.selectedEncaUtilizacionProyecto.setId_cl(this.selectedProyecto.getId_c());/* Aqui se le puede agregar una busqueda por cliente en un futuro. Ahorita  */
                this.selectedEncaUtilizacionProyecto.setId_p(this.selectedProyecto.getId_p());
                UtilizacionProyectoControlador sp = new UtilizacionProyectoControlador();
                this.encaUtilizacionProyectos = sp.getConsulta_UtilizacionProyecto(this.selectedEncaUtilizacionProyecto);
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void anularUtilizacionProyecto() {
        try {
            if (this.validar_anular() == true) {
                if (sm.validar_rol_usuario("wfrmcon_UtilizacionProyecto", sm.anular) == true) {
                    UtilizacionProyectoControlador sp = new UtilizacionProyectoControlador();
                    sp.anularUtilizacionProyecto(this.detaUtilizacionProyectos);

                    LimpiarManaged.limpiar();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void modificarUtilizacionProyecto() {

        try {
            if (this.validar_mofiicar() == true) {
                if (sm.validar_rol_usuario("wfrmcon_UtilizacionProyecto", sm.modificar) == true) {
                    UtilizacionProyectoControlador up = new UtilizacionProyectoControlador();
                    up.modificarUtilizacionProyecto(this.selectedDetaUtilizacionProyecto);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    private Boolean validar_mofiicar() throws Exception {

        try {
            Boolean var_return = true;
            if (this.selectedDetaUtilizacionProyecto.getEstado_up().equals("P")) {
                m.messageError("PENDIENTE MODFICIAR");
                var_return = false;
            } else if (this.selectedDetaUtilizacionProyecto.getEstado_up().equals("A")) {
                m.messageError("NO PUEDE ANULAR REGISTRO YA ESTA ANULADO!");
                var_return = false;
            }
            if (this.selectedDetaUtilizacionProyecto.getId_up() == null) {
                m.messageFatal("DEBE ELEGIR UN REGISTRO A MODIFICAR. NO TIENE CODIGO ASIGNADO. ERROR");
                var_return = false;
            }

            return var_return;
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    private Boolean validar_anular() throws Exception {

        try {
            Boolean var_return = true;
            if (this.selectedDetaUtilizacionProyecto.getEstado_up().equals("A")) {
                m.messageError("NO PUEDE ANULAR REGISTRO. YA ESTA ANULADO!");
                var_return = false;
            }
            if (this.selectedDetaUtilizacionProyecto.getId_up() == null) {
                m.messageFatal("DEBE ELEGIR UN REGISTRO A ANULAR. NO TIENE CODIGO ASIGNADO. ERROR");
                var_return = false;
            }
            if (this.detaUtilizacionProyectos.size() == 0) {
                m.messageFatal("NO HAY MATERIALES PARA ANULAR EL REGISTRO");
                var_return = false;
            }
            return var_return;
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public void ocultarFlag_1() {

        try {
            if (this.selectedDetaUtilizacionProyecto == null) {
                m.messageError("DEBE ELEGIR UN REGISTRO PARA CONTINUAR");
            } else if (this.selectedDetaUtilizacionProyecto != null) {
                this.flagStep_1 = false;
                this.flagStep_2 = true;

                UtilizacionProyectoControlador up = new UtilizacionProyectoControlador();
                this.detaUtilizacionProyectos = up.getDetaUtilizacionProyecto(this.selectedDetaUtilizacionProyecto.getId_up());

            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void ocultarFlag_2() {
        try {
            this.flagStep_1 = true;
            this.flagStep_2 = false;
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void getProyecto_Quick(Proyecto p) {
        try {
            this.selectedProyecto = p;
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void generarReporte_Enca() {
        try {
            if (this.encaUtilizacionProyectos == null) {
                m.messageError("NO HAY REGISTROS EN LA BUSQUEDA");
            } else {
                if (sm.validar_rol_usuario("wfrmcon_UtilizacionProyecto", sm.reporte) == true) {
                    this.selectedEncaUtilizacionProyecto.setId_p(this.selectedProyecto.getId_p());
                    UtilizacionProyectoControlador up = new UtilizacionProyectoControlador();
                    up.generarReporte_Enca(this.selectedEncaUtilizacionProyecto);
                }

            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void generarReporte_Deta() {
        try {
            if (this.detaUtilizacionProyectos.size() <= 0) {
                m.messageError("NO HAY MATERIALES PARA GENERAR REPORTE DEL DETALLE");
            } else {
                if (sm.validar_rol_usuario("wfrmcon_UtilizacionProyecto", sm.reporte) == true) {
                    UtilizacionProyectoControlador up = new UtilizacionProyectoControlador();
                    up.generarReporte_Detalle(this.selectedDetaUtilizacionProyecto);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }
    /*
    SETTERS AND GETTERS
     */

    public List<UtilizacionProyecto> getEncaUtilizacionProyectos() {
        return encaUtilizacionProyectos;
    }

    public void setEncaUtilizacionProyectos(List<UtilizacionProyecto> encaUtilizacionProyectos) {
        this.encaUtilizacionProyectos = encaUtilizacionProyectos;
    }

    public List<UtilizacionProyecto> getDetaUtilizacionProyectos() {
        return detaUtilizacionProyectos;
    }

    public void setDetaUtilizacionProyectos(List<UtilizacionProyecto> detaUtilizacionProyectos) {
        this.detaUtilizacionProyectos = detaUtilizacionProyectos;
    }

    public Boolean getFlagStep_1() {
        return flagStep_1;
    }

    public void setFlagStep_1(Boolean flagStep_1) {
        this.flagStep_1 = flagStep_1;
    }

    public Boolean getFlagStep_2() {
        return flagStep_2;
    }

    public void setFlagStep_2(Boolean flagStep_2) {
        this.flagStep_2 = flagStep_2;
    }

    public UtilizacionProyecto getSelectedDetaUtilizacionProyecto() {
        if (selectedDetaUtilizacionProyecto == null) {
            selectedDetaUtilizacionProyecto = new UtilizacionProyecto();
        }
        return selectedDetaUtilizacionProyecto;
    }

    public void setSelectedDetaUtilizacionProyecto(UtilizacionProyecto selectedDetaUtilizacionProyecto) {
        this.selectedDetaUtilizacionProyecto = selectedDetaUtilizacionProyecto;
    }

    public UtilizacionProyecto getSelectedEncaUtilizacionProyecto() {
        if (selectedEncaUtilizacionProyecto == null) {
            selectedEncaUtilizacionProyecto = new UtilizacionProyecto();
        }
        return selectedEncaUtilizacionProyecto;
    }

    public void setSelectedEncaUtilizacionProyecto(UtilizacionProyecto selectedEncaUtilizacionProyecto) {
        this.selectedEncaUtilizacionProyecto = selectedEncaUtilizacionProyecto;
    }

    public Proyecto getSelectedProyecto() {
        if (selectedProyecto == null) {
            selectedProyecto = new Proyecto();
        }
        return selectedProyecto;
    }

    public void setSelectedProyecto(Proyecto selectedProyecto) {
        this.selectedProyecto = selectedProyecto;
    }
}
